/**
 *********************************************************
 ** <h1>SFMLex - Simple and Fast Multimedia Library Extensions.</h1>
 ** SFMLex Copyright (C) 2008 Neil Johnson (neil@emailus.me.uk)
 **
 ** SFML - Simple and Fast Multimedia Library
 ** Copyright (C) 2007-2008 Laurent Gomila (laurent.gom@gmail.com)
 **
 ** This software is provided 'as-is', without any express or implied warranty.
 ** In no event will the authors be held liable for any damages arising from the use of this software.
 **
 ** Permission is granted to anyone to use this software for any purpose,
 ** including commercial applications, and to alter it and redistribute it freely,
 ** subject to the following restrictions:
 **
 ** 1. The origin of this software must not be misrepresented;
 **    you must not claim that you wrote the original software.
 **    If you use this software in a product, an acknowledgment
 **    in the product documentation would be appreciated but is not required.
 **
 ** 2. Altered source versions must be plainly marked as such,
 **    and must not be misrepresented as being the original software.
 **
 ** 3. This notice may not be removed or altered from any source distribution.
 **
 ************************************************************
 */
#include "c_Resource.h"
#include "c_ResourceMgr.h"
#include "c_SpriteResource.h"
#include "c_ImageResource.h"
#include "c_SoundBufferResource.h"
#include "c_MusicResource.h"
#include "c_AnimSpriteResource.h"

namespace sfx
{
   
   const std::string c_Resource::d_DefaultGroup = "Default";
   const std::string c_Resource::d_DefaultName  = "FooBar";

   c_Resource::c_Resource( c_ResourceMgr* ResourceMgr ) :
   m_ResourceMgr( ResourceMgr ),
   m_Map(),
   m_Group( d_DefaultGroup ),
   m_Name( d_DefaultName )
   {
      std::cerr << "c_Resource()\n";
      
      m_Map.insert( make_pair("name", t_SetResouceFunc( boost::bind( &c_Resource::setName, boost::ref(*this), _1 ) ) ) );
      m_Map.insert( make_pair("group", t_SetResouceFunc( boost::bind( &c_Resource::setGroup, boost::ref(*this), _1 ) ) ) );
   }
      
   c_Resource::~c_Resource(void)
   {
      std::cerr << "~c_Resource()\n";
   }
   
   bool c_Resource::setParameter( const std::string& ParameterName, const std::string& ParameterValue )
   {
      t_SetResouceMap::iterator it;
      if( m_Map.end() != ( it = m_Map.find( ParameterName ) ) )
      {
         it->second( ParameterValue );
         return true;
      }

      return false;
   }
   
   c_Resource* c_Resource::createResource( c_ResourceMgr* ResourceMgr, const std::string& ResourceType )
   {
      c_Resource* Resource( 0 );
      
      if( ResourceType == "image" )
      {
         Resource = new c_ImageResource( ResourceMgr );
      }
      else if( ResourceType == "sprite" )
      {
         Resource = new c_SpriteResource( ResourceMgr );
      }
      else if( ResourceType == "soundbuffer" )
      {
         Resource = new c_SoundBufferResource( ResourceMgr );
      }
      else if( ResourceType == "music" )
      {
         Resource = new c_MusicResource( ResourceMgr );
      }
      else if( ResourceType == "animsprite" )
      {
         Resource = new c_AnimSpriteResource( ResourceMgr );
      }

      return Resource;
   }


}

